<?php
// +----------------------------------------------------------------------
// | 双擎基础框架 [ 基于ThinkLibrary扩展 ]
// +----------------------------------------------------------------------
// | 感谢ThinkLibrary原作者Anyon的封装
// +----------------------------------------------------------------------
// | Copyright (c) 2022~2024 https://www.sqm.la All rights reserved.
// +----------------------------------------------------------------------
// | Author: rotoos <87291030@qq.com>
// +----------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin\model;

use think\admin\Model;
use think\model\relation\hasMany;

/**
 * 模块表模型
 * Class SysModule
 * @package think\admin\model
 */
class SysModule extends Model
{
    /**
     * 字段转驼峰
     * @var bool
     */
    protected $convertNameToCamel = true;

    protected $hidden = [
        'update_time','updated_by'
    ];

    // 在模型实例上追加
    protected $append = [
        'image_arr'
    ];

    /**
     * 获取一条信息的详情
     * @param $id
     * @return array|mixed|SysModule|\think\Model
     */
    public static function detail($id)
    {
        return static::mk()->where(['id' => $id])->where(['is_deleted' => 0, 'status' => 0])->findOrEmpty();
    }

    /**
     * @param $value
     * @param $data
     * @return array|SysFile[]|\think\Collection
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function getImageArrAttr($value, $data)
    {
        // 检查原生字段是否为空
        if (empty($data['image'])) {
            return []; // 返回一个空数组
        }

        // 从数据中获取image字段的值
        $imageIds = $data['image'];

        // 检查字段是否为空或NULL
        if (empty($imageIds)) {
            return []; // 返回一个空数组
        }

        // 将字符串转换为数组
        $ids = explode(',', $imageIds);

        // 查询SysFile模型，获取所有对应的文件信息
        $files = SysFile::whereIn('id', $ids)->select();

        return $files;
    }

    /**
     * 模块关联的菜单
     * 一对多关系表
     * @return hasMany
     */
    public function menus(): hasMany
    {
        return $this->hasMany(SysMenu::class, 'module', 'id')->where(['is_deleted' => 0]);
    }

    /**
     * 模块关联手机端菜单
     * @return hasMany
     */
    public function mobileMenus(): hasMany
    {
        return $this->hasMany(SysMobileMenu::class, 'module', 'id')->where(['is_deleted' => 0]);
    }
}